字符串题目

import java.util.Scanner;
public class solution{
public static void solution(int n)
{
int ans=0;
for(int i=1;i<=n;i++)
{
String s=makehuiwen(i);
ans=ans+Integer.parseInt(s);
}
System.out.print(ans);
}
public static String makehuiwen(int n)
{
StringBuffer s=new StringBuffer();
for(int i=1;i<=n;i++)
{
s.append(i+"");
}
for(int i=n-1;i>=1;i--)
{
s.append(i+"");
}
return s.toString();
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();
System.out.print(n);
}
}
约瑟夫环问题

import java.util.Scanner;
public class solution{
public static void solution(int n)
{
int ans=0;
for(int i=2;i<=n;i++)
ans=(ans+3)%i;
System.out.print(ans+1);
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();
solution(n);
}
}

  1. 字符串大小写转换(暴力求解)大写变小写要+32
    import java.util.Scanner;
    public class solution{
    public static void solution(String s)
    {

     char[] c=s.toCharArray();
     for(int i=0;i<c.length;i++)
         if(c[i]<='Z'&&c[i]>='A')
             c[i]=(char)(c[i]+32);
     for(int i=0;i<c.length;i++)
     System.out.print(c[i]);

    }
    public static void main(String[] args)
    {

     String s="adsaADsaA";
     solution(s);

    }
    }

  2. 输出字符串中仅出现一次的第一个字符(暴力求解)
    import java.util.Scanner;
    public class solution{
    public static void solution(String s)
    {char[] c=s.toCharArray();
    int[] m=new int[700000];
    for(int i=0;i<s.length();i++)

      m[c[i]-'0']++;

    for(int i=0;i<s.length();i++)

      if(m[c[i]-'0']==1)
          System.out.print(c[i]);

    }
    public static void main(String[] args)
    {

     String s="adsaADsaA";
     solution(s);

    }
    }

  3. 给出 A,B 两个字符串,求在第一个字符串出现,但第二个字符串中未出现,
    重复出现时只取第一次出现,输出字符串
    import java.util.Scanner;
    public class solution{
    public static void solution(String s1,String s2)
    {char[] c1=s1.toCharArray();
    char[] c2=s2.toCharArray();
    int[] m=new int[700000];
    int[] n=new int[700000];
    for(int i=0;i<s1.length();i++)

      if(m[c1[i]-'0']==0)m[c1[i]-'0']++;

    for(int i=0;i<s2.length();i++)

     if(n[c2[i]-'0']==0) n[c2[i]-'0']++;

    for(int i=0;i<s1.length();i++)

      if(m[c1[i]-'0']==1&&n[c1[i]-'0']==0)
          System.out.print(c1[i]);

    }
    public static void main(String[] args)
    {

     String s1="adsaADsaA";
     String s2="zzsafasdsa";
     solution(s1,s2);

    }
    }
    import java.util.*;
    public class solution{
    public static void solution(String s1,String s2)
    {

     Map map=new HashMap();
     for(int i=0;i<s1.length();i++)
         if(!map.containsKey(s1.charAt(i)))map.put(s1.charAt(i),1);
     for(int i=0;i<s2.length();i++)
         if(map.containsKey(s2.charAt(i)))map.remove(s2.charAt(i));
     for(int i=0;i<s1.length();i++)
         if(map.containsKey(s1.charAt(i)))
             System.out.print(s1.charAt(i));

    }
    public static void main(String[] args)
    {

     String s1="adsaADsaA";
     String s2="zzsafasdsa";
     solution(s1,s2);

    }
    }
    (暴力求解,hash对应+滑动窗口思想)

  4. 给定一个字符串,一个子串,判断子串在该字符串中出现的次数(暴力+滑动窗口)
    public class solution{
    public static void solution(String s,String t)
    {

     char[] s1=s.toCharArray();
     char[] t1=t.toCharArray();
     int time=0;
     int j=0;
     int i=0;
     while(i<s1.length&&j<t1.length)
     {
         if(s1[i]==t1[j])
         {
             i++;j++;
             if(j==t1.length){j=0;time++;}
         }
         else
         {
             i=i-j+1;
             j=0;
         }
     }
     System.out.print(time);

    }
    public static void main(String[] args)
    {

     solution("abababababab","ab");

    }
    }

  5. 字符串移除奇数位置字符问题(暴力求解)
    public class solution{
    public static void solution(String s)
    {

     int n=s.length();
     char[] s1=s.toCharArray();
     char[] ans=new char[n];
     int j=0;
     for(int i=0;i<n;i++)
     {
         if(i%2==0)
             {ans[j]=s1[i];j++;}
     }
     for(int i=0;i<ans.length;i++)
         System.out.print(ans[i]);

    }
    public static void main(String[] args)
    {

     solution("abababababab");

    }
    }
    import java.util.*;
    public class solution{
    public static void solution(String s1,String s2)
    {

     int i=0;int j=0;int time=0;
     char[] c1=s1.toCharArray();
     char[] c2=s2.toCharArray();
     while(i<c1.length&&j<c2.length)
     {
         if(c1[i]==c2[j])
         {
             i++;j++;
             if(j==s2.length())
             {
                 j=0;time++;
             }
         }
         else
         {
             i=i-j+1;
             j=0;
         }
     }
     System.out.print(time);

    }
    public static void main(String[] args)
    {

     String s1="adsaADsaafadadadaA";
     String s2="ad";
     solution(s1,s2);

    }
    }

  6. 字符串括号匹配问题(考察循环和if语句并不涉及算法部分)
    import java.util.*;
    public class solution{
    public static void solution(String s1)
    {

     Stack<Character> stack=new Stack<Character>();
     for(int i=0;i<s1.length();i++)
     {
         if(s1.charAt(i)=='('||s1.charAt(i)=='['||s1.charAt(i)=='{')
             stack.push(s1.charAt(i));
         if(stack.peek()=='('&&s1.charAt(i)==')')
             stack.pop();
         else if(stack.peek()=='['&&s1.charAt(i)==']')
             stack.pop();
         else if(stack.peek()=='{'&&s1.charAt(i)=='}')
             stack.pop();
     }
     if(stack.empty())
          System.out.print("yes");

    }
    public static void main(String[] args)
    {

     String s1="()";
    
     solution(s1);

    }
    }

  7. 字符串反转输出问题(暴力求解)reverse
    public class solution{
    public static void solution(String s)
    {

     char[] c=s.toCharArray();
     for(int i=s.length()-1;i>=0;i--)
     {
         System.out.print(c[i]);
     }

    }
    public static void main(String[] args)
    {

     solution("abababababab");

    }
    }

  8. 去掉字符串末尾的空格(暴力求解)
    public class solution{
    public static void solution(String s)
    {

     StringBuilder s1=new StringBuilder();
     for(int i=0;i<s.length();i++)
     {
         if(s.charAt(i)!=' ')
             s1.append(s.charAt(i));
     }
     for(int i=0;i<s1.length();i++)
         System.out.print(s1.charAt(i));

    }
    public static void main(String[] args)
    {

     solution("abababab aba b");

    }
    }

  9. 判断一个字符串中数字,大小写字母、空格以及特殊字符的数量并输出(暴力求解)
    不是其余的就是特殊字符了,汉字就判断在!(40《x《127)

  10. 输出一组字符串,再输入一组字符串,判断是否有与之前字符串一致,有则
    输出是第几个字符与之前字符串一致(用hash对照以下)
    import java.util.HashMap;
    import java.util.Map;

public class solution{
public static void solution(String[] s,String a)
{
Map map=new HashMap();
for(int i=0;i<s.length;i++)
{
map.put(s[i], i);
}
if(map.containsKey(a))
System.out.print(map.get(a));
}
public static void main(String[] args)
{
String[] s={"absdad","as","asd"};
String a="asd";
solution(s,a);
}
}
18.输出字符串的最大回文子字符串的长度(输入一串字符串,判断里面是否有
回文字串,如“12321”,有则输出其中最大的长度,如“211232109”输出 5)(dp动态规划)
import java.util.HashMap;
import java.util.Map;

public class solution{
public static void solution(String s)
{
boolean[][] map=new boolean[s.length()][s.length()];
char[] a=s.toCharArray();
String ans="";
for(int l=0;l<s.length();l++)
{
for(int i=0;i+l<s.length();i++)
{
int j=i+l;
if(l==0){map[i][j]=true;}
else if(l==1){map[i][j]=(a[i]==a[j]);}
else map[i][j]=((a[i]==a[j])&&(map[i+1][j-1]));
if(l+1>ans.length()&&map[i][j])ans=s.substring(i,j+1);
}
}
System.out.print(ans);
}
public static void main(String[] args)
{
String s="12321";
solution(s);
}
}
19.判断给定字符串是不是 ip 地址(判断 Ip 地址是否合法,如 128.211.11.2 将
字符串分为 128 211 11 2 四个整形变量,判断范围是否在 0~255 之间,若有
一个不在范围内,则为不合法)(暴力求解)
import java.util.HashMap;
import java.util.Map;

public class solution{
public static void solution(String s)
{
String[] a=s.split("\.");
for(int i=0;i<a.length;i++)
{
if(Integer.parseInt(a[i])>=255||Integer.parseInt(a[i])<=0)
{
System.out.print("no");return;
}
}
System.out.print("yes");
}
public static void main(String[] args)
{
String s="128.298.11.2";
solution(s);
}
}
20.按出现频率高低输出字母,给出字典序列为 aaabbbbassd(暴力求解+字符对应数组的hash)

21.编写一个函数来查找字符串数组中的最长公共前缀,若不存在公共前缀,返
回空字符串 (暴力搜索,分开写函数就比较清晰了)

public class midsreach {
public static String solution(String[] s)
{
String ans=s[0];
String temp="";
for(int i=0;i<s.length;i++)
{
temp=com(ans,s[i]);
if(temp.length()<ans.length())
{ans=temp;}
}
System.out.print(ans);
return ans;
}
public static String com(String a,String b)
{
String ans="";
int index=0;
int n=Math.min(a.length(), b.length());
for(int i=0;i<n;i++)
{
if(a.charAt(i)==b.charAt(i))index++;
else break;
}
ans=a.substring(0, index);
return ans;
}
public static void main(String arg[])
{
String[] s={"flower","flow","flight"};
solution(s);
}
}
private static String longestSameStr(String[] strs){
if(strs.length==0)
return "";
String s=strs[0];
for(int i=1;i<strs.length;i++){
while (strs[i].indexOf(s)!=0){
s=s.substring(0,s.length()-1);
}
}
return s;
}

22.输入一个数字组成的字符串,再输入一个数字,数字代表在输入的字符串前面加 0 要达到的长度,例如输入字符串 23,输入数字 8,则输出就是 00000023(暴力求解)
23.输入一个字符串,不同的单词间用空格隔开,把这些单词的首字母取出并大
写输出,如输入:hello world,输出:HW,请实现多行输入的输出,输入 0
则停止继续输入(暴力求解)
11.输出字符串简称,例如字符串是"end of file",输出"EOF"(暴力求解)split“ ”或者if判断
8. 输出字符串中仅出现一次的第一个字符(暴力求解)数组哈希
7. 字符串大小写转换(暴力求解)+-32
6. 求字符串的所有子串(暴力求解)可以自己写一个substring就可以了
4. 判断两个字符串是否是异位:比如 abcn 和 banc 是一对,anc 和 nac 是一对,
两个字符串完全奇偶互换,则称为异位,判断两个字符串是否为异位词,意
思是判断两个字符串有相同数量的字母(就是去简单的判断一下是不是有相同的字母,sort飘过或者用hash)数组哈希看看是不是相等的
5. 字符串中字符替换:把字符串中的字符 a 和 A 换成 c 输出(暴力求解)for+if
61.买 n 次水果,每次买的个数和种类都不同,问买苹果的个数。例如:第一次
"apple orange banana",第二次"apple orange",第三次"orange"买两次,则 apple=2(split)
哈希统计下

67给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。(也适用于大数之和问题!!!!)
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder s=new StringBuilder();
int i=num1.length()-1,j=num2.length()-1;int add=0;
for(;i>=0||j>=0||add!=0;i--,j--)
{
int n1=i>=0?num1.charAt(i)-'0':0;
int n2=j>=0?num2.charAt(j)-'0':0;
s.append((n1+n2+add)%10);
add=(n1+n2+add)/10;
}
s.reverse();
return s.toString();
}
}
37.要求实现大数的乘法,两个 1000000000 以内的数相乘。
利用字符传运算

class Solution {
public String addStrings(String num1, String num2) {
StringBuilder s=new StringBuilder();
int i=num1.length()-1,j=num2.length()-1;int add=0;
for(;i>=0||j>=0||add!=0;i--,j--)
{
int n1=i>=0?num1.charAt(i)-'0':0;
int n2=j>=0?num2.charAt(j)-'0':0;
s.append((n1n2+add)%10);
add=(n1
n2+add)/10;
}
s.reverse();
return s.toString();
}
}

38输入两个整数 M 和 N,输出两个数转化为二进制)
public void binaryToDecimal(int n){
int t = 0; //用来记录位数
int bin = 0; //用来记录最后的二进制数
int r = 0; //用来存储余数
while(n != 0){
r = n % 2;
n = n / 2;
bin += r * Math().pow(10,t);
t++;
}
System.out.println(bin);
}

全部评论

相关推荐

一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务