[英]Anagram code using C++ only works sometimes
當我比較 Pizza 和 Pizza 或 aaa 和 aaa 等字符串時,我的代碼返回 0。 當我通過調試器運行代碼時,它顯示在我的第二個 for 循環中,它實際上是從第一個 for 循環向 arr1 添加元素。 我應該如何解決這個問題?
#include <bits/stdc++.h>
using namespace std;
int anagram(string s1,string s2){
int array1[26]={0},array2[26]={0};
//if string lengths are different
if(s1.length()!=s2.length())
return 0; //they are not anagrams
//for string1
for(int i=0;s1[i]!='\0';i++){
//storing frequency for each letter in the string
array1[s1[i]-'a']++;
}
//for string2
for(int i=0;s2[i]!='\0';i++){
//storing frequency for each letter in the string
array2[s2[i]-'a']++;
}
//comparison step
for(int i=0;i<26;i++){
// if any letter has different no of occurence,
// then strings are not anagrams
if(array1[i]!=array2[i])
return 0;
}
return 1;// else they are anagrams
}
您的數組大小為 26。這意味着它可以容納 26 個項目。 但是,您要傳遞包含52 個唯一字符的字符串。 請記住,大寫和小寫字母具有不同的 ASCII 值!
所以'P' - 'a'
可能不在數組的范圍內,因此將是未定義的行為。
您需要確保首先將字符轉換為小寫,即:
array1[tolower(s1[i])-'a']++;
您的代碼僅適用於小寫字符 解決方案:在計數前將每個字符轉換為小寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.