其他分享
首页 > 其他分享> > 字符串练习题

字符串练习题

作者:互联网

有效的括号

import org.junit.Test;
import java.util.Stack;

/**
 * 有效的括号
 * https://leetcode-cn.com/problems/valid-parentheses/
 */
public class IsValid {


    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        char ch;
        char peek;

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

            if (ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);
            } else if (ch == ')' || ch == ']' || ch == '}') {
                if (stack.empty()){
                    return false;
                }
                peek = stack.peek();
                if ( peek == '(' && ch == ')'
                        || peek == '[' && ch == ']' || peek == '{' && ch == '}') {
                    stack.pop();
                }else{
                    return false;
                }
            }
        }
        return stack.empty();
    }

    @Test
    public void test(){
        System.out.println(isValid("]"));
    }
}

二进制求和

public class AddBinary {
    public String addBinary(String a, String b) {
        if (a == null || b == null){
            return "0";
        }
        if ("".equals(a)|| a.charAt(0) == '0'){
            return b;
        }
        if ("".equals(b) ||b.charAt(0) == '0'){
            return a;
        }

        StringBuilder r = new StringBuilder();
        int last1 = a.length() - 1;
        int last2 = b.length() - 1;
        int i = 0;
        int j = 0;
        int c = 0;
        while (last1 >= 0 && last2 >=0) {
            i = a.charAt(last1)-'0';
            j = b.charAt(last2)-'0';
            if (i+j+c==1){
                r.append("1");
                // 没有进位
                c = 0;
            }else if (i+j+c==0){
                r.append("0");
                // 没有进位
                c = 0;
            }else if (i+j+c==2){
                r.append("0");
                // 进位
                c = 1;
                }else if (i+j+c==3){
                    r.append("1");
                    // 进位
                    c = 1;
                }
            last1--;
            last2--;
        }

        while (last1>=0){
            i = a.charAt(last1)-'0';
            if (c==0){
                r.append(i);
            }else {
                if (i+c==1){
                    r.append("1");
                    // 没有进位
                    c = 0;
                }else if (i+c==0){
                    r.append("0");
                    // 没有进位
                    c = 0;
                }else if (i+c==2){
                    r.append("0");
                    // 进位
                    c = 1;
                }
            }
            last1--;
        }
        while (last2>=0){
            j = b.charAt(last2)-'0';
            if (c==0){
                r.append(j);
            }else {
                if (j+c==1){
                    r.append("1");
                    // 没有进位
                    c = 0;
                }else if (j+c==0){
                    r.append("0");
                    // 没有进位
                    c = 0;
                }else if (j+c==2){
                    r.append("0");
                    // 进位
                    c = 1;
                }
            }
            last2--;
        }
        if (c==1){
            r.append("1");
        }
        return r.reverse().toString();
    }

    @Test
    public void test() {
        System.out.println(addBinary("1111", "1111"));
    }
}

标签:练习题,ch,else,last1,append,last2,字符串,进位
来源: https://blog.csdn.net/qq_44581597/article/details/117898833